import java.util.HashMap;
import java.util.Map;

/**
 * 560. 和为 K 的子数组
 * https://leetcode.cn/problems/subarray-sum-equals-k/description/?envType=study-plan-v2&envId=top-100-liked
 */
class Solution {
    /**
     * 前缀和+hash
     */
    public int subarraySum2(int[] nums, int k) {
        Map<Integer, Integer> map = new HashMap<>();
        map.put(0, 1);
        int sum = 0, ret = 0;
        for(int x : nums) {
            //统计前缀和sum
            sum += x;
            //查找当前位置的前面有多少个前缀和是 sum[i] - k
            ret += map.getOrDefault(sum - k, 0);
            //把当前数组丢到哈希表里
            map.put(sum, map.getOrDefault(sum, 0) + 1);
        }
        return ret;
    }
    /**
     * 暴力解法
     */
    public int subarraySum(int[] nums, int k) {
        int ret = 0;
        for(int i = 0; i < nums.length; i++) {
            int tmp = 0;
            for(int j = i; j < nums.length; j++) {
                tmp += nums[j];
                if(tmp == k) ret++;
            }
        }
        return ret;
    }
}